extern "C" {
#include "quickjs/quickjs-libc.h"
#include "quickjs/quickjs.h"
}
#include "DtfModule.h"

const uint32_t qjsc_test_size = 87;

const uint8_t qjsc_test[87] = {
        0x02, 0x05, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x2e,
        0x6a, 0x73, 0x06, 0x64, 0x74, 0x66, 0x0c, 0x72,
        0x65, 0x6e, 0x64, 0x65, 0x72, 0x08, 0x52, 0x65,
        0x63, 0x74, 0x08, 0x74, 0x79, 0x70, 0x65, 0x0f,
        0xbe, 0x03, 0x01, 0xc0, 0x03, 0x00, 0x00, 0x01,
        0x00, 0xc2, 0x03, 0x00, 0x0e, 0x00, 0x06, 0x01,
        0x9e, 0x01, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00,
        0x10, 0x00, 0xc2, 0x03, 0x00, 0x0c, 0x66, 0x00,
        0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d,
        0xe3, 0x00, 0x00, 0x00, 0xf1, 0x29, 0xbe, 0x03,
        0x01, 0x05, 0x00, 0x00, 0x0e, 0x17, 0x36,
};

void AddBaseObj(JSContext *ctx);

int main(int argc, char **argv)
{
    JSRuntime *rt;
    JSContext *ctx;
    rt = JS_NewRuntime();
    ctx = JS_NewContextRaw(rt);
    JS_SetModuleLoaderFunc(rt, NULL, js_module_loader, NULL);
    AddBaseObj(ctx);
    js_init_module_dtf(ctx,"dtf");
    js_std_add_helpers(ctx, argc, argv);
    js_std_eval_binary(ctx, qjsc_test, qjsc_test_size, 0);
    js_std_loop(ctx);
    JS_FreeContext(ctx);
    JS_FreeRuntime(rt);
    return 0;
}

void AddBaseObj(JSContext *ctx) {
    JS_AddIntrinsicBaseObjects(ctx);
    JS_AddIntrinsicDate(ctx);
    JS_AddIntrinsicEval(ctx);
    JS_AddIntrinsicStringNormalize(ctx);
    JS_AddIntrinsicRegExp(ctx);
    JS_AddIntrinsicJSON(ctx);
    JS_AddIntrinsicProxy(ctx);
    JS_AddIntrinsicMapSet(ctx);
    JS_AddIntrinsicTypedArrays(ctx);
    JS_AddIntrinsicPromise(ctx);
    JS_AddIntrinsicBigInt(ctx);
}
